package homework01;

/**
 * 定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
 * 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
 *
 * 二维数组求列总和未解决
 */

//  第一步 封装一个类
public class Code0201 {
// 　　1、创建int类型的变量标记X、Y轴坐标
// 　　　 创建arr二维数组
    //  定义行/列/二位数组
    private int sumRows;
    //private int sumCols;
    private int sumLeft;
    private int sumRight;
    private int x;
    private int y;
    private int[][] arr;

        // 　　2、无参方式初始化二维数组
    public Code0201() {
        this.sumRows = 0;
        this.sumLeft = 0;
        this.sumRight = 0;
        this.x = 0;
        this.y = 0;
        arr = new int[16][16];
    }

        // 　　有参方式初始化二维数组，把X轴Y轴坐标传入数组中
    public Code0201(int rows, int cols) {
        this.sumRows = 0;
        this.sumLeft = 0;
        this.sumRight = 0;
        this.x = 0;
        this.y = 0;
        arr = new int[rows][cols];
    }

    public int[][] getArr() {
        return arr;
    }

    public void setArr(int[][] arr) {
        this.arr = arr;
    }

    // 3、嵌套for循环把二层数组打印出来
    public void addValue(){
        for (int i=0;i<arr.length;i++){
            for (int j=0;j<arr[i].length;j++){
                arr[i][j] = j;
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

// 　　4、求和
    public void addShow(){
// 　　　　　 　　for循环把外层数组的长度取出来，放在I中
        for (int i=0;i<arr.length;i++){
// 　　　　　　　　当i达到总长度的时候，累加器还原到0的状态
            if(x == i){
                sumRows = 0;
            }
// 　　　　　　　 　　for循环把内层数组的长度取出来，放在J中
            for (int j=0;j<arr[i].length;j++){

// 　　　　　　　　　　存储每一个的总和，累加器等于当前i行j总长度的累加，j长度为16那么sumRows就等于0-15总和（就是当前i行的总和）
                sumRows += arr[i][j];
                if(j == arr[i].length-1) {
                    System.out.println("第" + i + "行的值为：" + sumRows);
                    x += 1;
                }

// 　　　　　　　　　　存储每列第一个元素的总和，每次循环当J为0时存储在Y中，累加并打印当前循环Y的累加数值
                if(0 == j){
                    y += arr[i][j];
                    System.out.println("Y = " + y);
                }

// 　　　　　　　　　　存储左上角到右下角的总和，每行I与J的值相当把该元素存储在累加器中并打印（第一行0，0/第二行1，1如此类推）
                if(i == j) {
                    sumLeft += arr[i][j];
                }

// 　　　　　　　　　　存储右上角到左下角的总和，当J的值等于每次循环每次循环最大长度1的时候的累加（第一次循环时16-1-0）
                if(j == arr[i].length-1-i){
                    sumRight += arr[i][j];
                }
            }
        }
        System.out.println("左上角到右下角的总和是："+sumLeft);
        System.out.println("右上角到左下角的总和是："+sumRight);
    }

    public static void main(String[] args) {
        Code0201 code0201 = new Code0201(16,16);
        code0201.addValue();
        code0201.addShow();
    }
}


